package cc.vv.baselibrary.util.voice;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Build;

/**
 * 公共音频播放工具类
 * Created by 034 on 2018/4/28.
 */

public class BTVoicePlayerUtil {

    private static BTVoicePlayerUtil mInstance;

    public static BTVoicePlayerUtil getInstance() {
        if (null == mInstance) {
            synchronized (BTVoicePlayerUtil.class) {
                if (null == mInstance) {
                    mInstance = new BTVoicePlayerUtil();
                }
            }
        }
        return mInstance;
    }

    /**
     * 听筒、扬声器切换
     * <p>
     * 注释： 敬那些年踩过的坑和那些网上各种千奇百怪坑比方案！！
     * <p>
     * AudioManager设置声音类型有以下几种类型（调节音量用的是这个）:
     * <p>
     * STREAM_ALARM 警报
     * STREAM_MUSIC 音乐回放即媒体音量
     * STREAM_NOTIFICATION 窗口顶部状态栏Notification,
     * STREAM_RING 铃声
     * STREAM_SYSTEM 系统
     * STREAM_VOICE_CALL 通话
     * STREAM_DTMF 双音多频,不是很明白什么东西
     * <p>
     * ------------------------------------------
     * <p>
     * AudioManager设置声音模式有以下几个模式（切换听筒和扬声器时setMode用的是这个）
     * <p>
     * MODE_NORMAL 正常模式，即在没有铃音与电话的情况
     * MODE_RINGTONE 铃响模式
     * MODE_IN_CALL 接通电话模式 5.0以下
     * MODE_IN_COMMUNICATION 通话模式 5.0及其以上
     *
     * @param on true扬声器；false听筒；
     */
    public void setSpeakerPhoneOn(MediaPlayer mMediaPlayer, AudioManager mAudioManager, boolean on) {
        if (null == mMediaPlayer || null == mAudioManager) {
            return;
        }
        if (on) {
            mAudioManager.setSpeakerphoneOn(true);
            mAudioManager.setMode(AudioManager.MODE_NORMAL);
            //设置音量，解决有些机型切换后没声音或者声音突然变大的问题
            mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                    mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC), AudioManager.FX_KEY_CLICK);

        } else {
            mAudioManager.setSpeakerphoneOn(false);

            mAudioManager.setMicrophoneMute(false);
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
            //5.0以上
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
                //设置音量，解决有些机型切换后没声音或者声音突然变大的问题
                mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                        mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), AudioManager.FX_KEY_CLICK);

            } else {
                mAudioManager.setMode(AudioManager.MODE_IN_CALL);
                mAudioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
                        mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), AudioManager.FX_KEY_CLICK);
            }
        }

    }
}
